﻿''' <summary>
''' Fichero que contiene la clase JugadorClase encargada de generar las ligas del campeonato
''' </summary>
''' <author>Juan David Cabezuelo, Arturo Sirvent, Fermín Martínez, Eugenio Cañete y Pablo Vicedo</author>
''' 

Public Class Jugador

    Public Structure StrDireccion
        Dim Calle As String
        Dim Numero As Integer
        Dim Puerta As String
        Dim Localidad As String
        Dim Provincia As String
    End Structure

    Private _NIF As String
    Private _Nombre As String
    Private _Apellidos As String
    Private _FechaNacimiento As Date
    Private _Direccion As StrDireccion
    Private _CorreoElectronico As String
    Private _Whatsapp As Integer
    Private _Facebook As String
    Private _Twitter As String

    ''' <summary>
    ''' Constructor vacío.
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()
        Me._NIF = "000000000"
        Me._Nombre = ""
        Me._Apellidos = ""
        Me._FechaNacimiento = #1/1/1000#
        With Me._Direccion
            .Calle = ""
            .Numero = 0
            .Puerta = ""
            .Localidad = ""
            .Provincia = ""
        End With
        Me._CorreoElectronico = ""
        Me._Whatsapp = 0
        Me._Facebook = ""
        Me._Twitter = ""

    End Sub

    ''' <summary>
    ''' Constructor con parámetros que inserta el objeto automaticamente en la bd.
    ''' </summary>
    ''' <param name="NIF"></param>
    ''' <param name="Nombre"></param>
    ''' <param name="Apellidos"></param>
    ''' <param name="FechaNacimiento"></param>
    ''' <param name="calle"></param>
    ''' <param name="numero"></param>
    ''' <param name="puerta"></param>
    ''' <param name="localidad"></param>
    ''' <param name="provincia"></param>
    ''' <param name="correo"></param>
    ''' <param name="whatsapp"></param>
    ''' <param name="facebook"></param>
    ''' <param name="twiter"></param>
    ''' <remarks></remarks>
    Public Sub New(ByVal NIF As String, ByVal Nombre As String, ByVal Apellidos As String, _
                   ByVal FechaNacimiento As Date, ByVal calle As String, ByVal numero As Integer, _
                   ByVal puerta As String, ByVal localidad As String, ByVal provincia As String, _
                   ByVal correo As String, ByVal whatsapp As Integer, ByVal facebook As String, _
                   ByVal twiter As String)

        'aquí valido que la forma de los datos sea correcta
        If (NIF.Length >= 8 And NIF.Length <= 10) Then
            Me._NIF = NIF
        Else
            Throw New ArgumentException("El NIF tiene que tener entre 8 y 10 caracteres")
        End If
        If ValidarCadena(Nombre, 60, True) Then
            Me._Nombre = Nombre
        Else
            Throw New ArgumentException("El nombre no puede exceder de 60 caracteres ni estar vacío")
        End If
        If ValidarCadena(Apellidos, 60, True) Then
            Me._Apellidos = Apellidos
        Else
            Throw New ArgumentException("El apellido no puede exceder de 60 caracteres ni estar vacío")
        End If
        Me._FechaNacimiento = FechaNacimiento
        With Me._Direccion
            If ValidarCadena(calle, 50, False) Then
                .Calle = calle
            Else
                Throw New ArgumentException("La calle no puede exceder de 50 caracteres")
            End If
            .Numero = numero
            If ValidarCadena(puerta, 10, False) Then
                .Puerta = puerta
            Else
                Throw New ArgumentException("La puerta no puede exceder de 10 caracteres")
            End If
            If ValidarCadena(localidad, 60, False) Then
                .Localidad = localidad
            Else
                Throw New ArgumentException("La localidad no puede exceder de 60 caracteres")
            End If
            If ValidarCadena(provincia, 60, False) Then
                .Provincia = provincia
            Else
                Throw New ArgumentException("La provincia no puede exceder de 60 caracteres")
            End If
        End With
        If ValidarCadena(correo, 50, False) Then
            Me._CorreoElectronico = correo
        Else
            Throw New ArgumentException("El correo electrónico no puede exceder de 50 caracteres")
        End If
        Me._Whatsapp = whatsapp
        If ValidarCadena(facebook, 100, False) Then
            Me._Facebook = facebook
        Else
            Throw New ArgumentException("La dirección de Facebook no puede exceder de 100 caracteres")
        End If
        If ValidarCadena(twiter, 50, False) Then
            Me._Twitter = twiter
        Else
            Throw New ArgumentException("La direccion de Twiter no puede exceder los 50 caracteres")
        End If

        'Inserción automática del jugador en la bd cada vez que se crea
        Dim miBD = New BaseDatos()
        Dim filasAfectadas As Integer
        filasAfectadas = miBD.InsertarModificarBorrar("INSERT INTO Jugadores(NIF, Nombre, Apellidos, FechaNacimiento, Calle, Numero," & _
                      "Puerta, Localidad, Provincia, CorreoElectronico, Whatsapp, Facebook," & _
                      "Twitter, Accesible) VALUES('" & Me._NIF & "' , '" & Me._Nombre & "' , '" & _
                      Me._Apellidos & "' , '" & Me.FechaNacimiento & "' , '" & Me._Direccion.Calle & _
                      "' , '" & Me._Direccion.Numero & "' , '" & Me._Direccion.Puerta & "' , '" & _
                      Me._Direccion.Localidad & "' , '" & Me._Direccion.Provincia & "' , '" & _
                      Me._CorreoElectronico & "' , '" & Me._Whatsapp & "' , '" & Me._Facebook & _
                      "' , '" & Me.Twiter & "' , '" & -1 & "')")
        If filasAfectadas = 0 Then
            Throw New ArgumentException("Error al guardar juagador en la base de datos")
        Else
            MsgBox("Se ha insertado " & filasAfectadas & " jugador")
        End If

    End Sub

    ''' <summary>
    ''' Constructor de copia.
    ''' </summary>
    ''' <param name="jugador"></param>
    ''' <remarks></remarks>
    Public Sub New(ByVal jugador As Jugador)
        Me._NIF = jugador._NIF
        Me._Nombre = jugador._Nombre
        Me._Apellidos = jugador._Apellidos
        Me._FechaNacimiento = jugador._FechaNacimiento
        Me._Direccion = jugador._Direccion
        Me._CorreoElectronico = jugador._CorreoElectronico
        Me._Whatsapp = jugador._Whatsapp
        Me._Facebook = jugador._Facebook
        Me._Twitter = jugador._Twitter
    End Sub

    ''' <summary>
    ''' Subproceso que realiza la actualización del jugador en la base de datos
    ''' </summary>
    ''' <param name="NIF"></param>
    ''' <param name="Nombre"></param>
    ''' <param name="Apellidos"></param>
    ''' <param name="FechaNacimiento"></param>
    ''' <param name="calle"></param>
    ''' <param name="numero"></param>
    ''' <param name="puerta"></param>
    ''' <param name="localidad"></param>
    ''' <param name="provincia"></param>
    ''' <param name="email"></param>
    ''' <param name="whatsapp"></param>
    ''' <param name="facebook"></param>
    ''' <param name="twiter"></param>
    ''' <param name="id"></param>
    ''' <remarks></remarks>
    Public Sub Actualizar(ByVal NIF As String, ByVal Nombre As String, ByVal Apellidos As String, _
                   ByVal FechaNacimiento As Date, ByVal calle As String, ByVal numero As Integer, _
                   ByVal puerta As String, ByVal localidad As String, ByVal provincia As String, _
                   ByVal email As String, ByVal whatsapp As Integer, ByVal facebook As String, _
                   ByVal twiter As String, ByVal id As Integer)

        If (NIF.Length <= 8 And NIF.Length >= 10) Then
            Throw New ArgumentException("El NIF tiene que tener entre 8 y 10 carcteres")
        End If
        If Not ValidarCadena(Nombre, 60, True) Then
            Throw New ArgumentException("El nombre no puede exceder de 60 caracteres ni estar vacío")
        End If
        If Not ValidarCadena(Apellidos, 60, True) Then
            Throw New ArgumentException("El apellido no puede exceder de 60 caracteres ni estar vacío")
        End If
        Me._FechaNacimiento = FechaNacimiento
        With Me._Direccion
            If Not ValidarCadena(calle, 50, False) Then
                Throw New ArgumentException("La calle no puede exceder de 50 caracteres")
            End If
            .Numero = numero
            If Not ValidarCadena(puerta, 10, False) Then
                Throw New ArgumentException("La puerta no puede exceder de 10 caracteres")
            End If
            If Not ValidarCadena(localidad, 60, False) Then
                Throw New ArgumentException("La localidad no puede exceder de 60 caracteres")
            End If
            If Not ValidarCadena(provincia, 60, False) Then
                Throw New ArgumentException("La provincia no puede exceder de 60 caracteres")
            End If
        End With
        If Not ValidarCadena(email, 50, False) Then
            Throw New ArgumentException("El correo electrónico no puede exceder de 50 caracteres")
        End If
        Me._Whatsapp = whatsapp
        If Not ValidarCadena(facebook, 100, False) Then
            Throw New ArgumentException("La dirección de Facebook no puede exceder de 100 caracteres")
        End If
        If Not ValidarCadena(twiter, 50, False) Then
            Throw New ArgumentException("La dirección de Twiter no puede exceder los 50 caracteres")
        End If

        Dim miBD = New BaseDatos()
        Dim filasAfectadas As Integer
        filasAfectadas = miBD.InsertarModificarBorrar("UPDATE Jugadores SET NIF='" & NIF & "', Nombre='" & Nombre & "', Apellidos='" & Apellidos & _
                       "', FechaNacimiento='" & FechaNacimiento & "', calle='" & calle & "', Numero = " & numero & _
                       ", Puerta='" & puerta & "', Localidad ='" & localidad & "', Provincia='" & provincia & _
                       "', CorreoElectronico ='" & email & "', Whatsapp=" & whatsapp & ", Facebook ='" & facebook & _
                       "', Twitter='" & twiter & "' WHERE Id = " & id & ";")
        If filasAfectadas = 0 Then
            Throw New ArgumentException("Error al modificar juagador en la base de datos")
        Else
            MsgBox("Se ha actualizado " & filasAfectadas & " jugador")
            FormModificarJugador.Close()
        End If
    End Sub

    ''' <summary>
    ''' Subproceso que borra un jugador de la base de datos.
    ''' </summary>
    ''' <param name="NIF"></param>
    ''' <param name="Nombre"></param>
    ''' <param name="Apellidos"></param>
    ''' <param name="id"></param>
    ''' <remarks></remarks>
    Public Sub Eliminar(ByVal NIF As String, ByVal Nombre As String, ByVal Apellidos As String, _
                        ByVal id As Integer)
        Dim miBD = New BaseDatos()
        Dim filasAfectadas As Integer
        filasAfectadas = miBD.InsertarModificarBorrar("UPDATE Jugadores SET NIF='" & NIF & "', Nombre='" & Nombre & "', Apellidos='" & Apellidos & "', Accesible=0 WHERE Id = " & id & ";")
        If filasAfectadas = 0 Then
            Throw New ArgumentException("Error al eliminar jugador en la base de datos")
        Else
            MsgBox("Se ha eliminado " & filasAfectadas & " jugador")
            FormBajaJugador.Close()
        End If
    End Sub

    Public Property NIF As String
        Get
            Return Me._NIF
        End Get
        Set(value As String)
            If (value.Length >= 8 And value.Length <= 10) Then
                Me._NIF = value
            Else
                Throw New ArgumentException("El NIF tiene que tener entre 8 y 10 caracteres")
            End If
        End Set
    End Property

    Public Property Nombre As String
        Get
            Return Me._Nombre
        End Get
        Set(value As String)
            If ValidarCadena(value, 60, True) Then
                Me._Nombre = value
            Else
                Throw New ArgumentException("El nombre no puede exceder de 60 caracteres ni estar vacío")
            End If
        End Set
    End Property

    Public Property Apellidos As String
        Get
            Return Me._Apellidos
        End Get
        Set(value As String)
            If ValidarCadena(value, 60, True) Then
                Me._Apellidos = value
            Else
                Throw New ArgumentException("El apellido no puede exceder de 60 caracteres ni estar vacío")
            End If
        End Set
    End Property

    Public Property FechaNacimiento As Date
        Get
            Return Me._FechaNacimiento
        End Get
        Set(value As Date)
            Me._FechaNacimiento = value
        End Set
    End Property

    Public ReadOnly Property Direccion As StrDireccion
        Get
            Return Me._Direccion
        End Get
    End Property

    Public Property CorreoElectronico As String
        Get
            Return Me._CorreoElectronico
        End Get
        Set(value As String)
            If ValidarCadena(value, 50, False) Then
                Me._CorreoElectronico = value
            Else
                Throw New ArgumentException("El correo electrónico no puede exceder de 50 caracteres")
            End If
        End Set
    End Property

    Public Property Whatsapp As Integer '********************************************************************************
        Get
            Return Me._Whatsapp
        End Get
        Set(value As Integer)
            Me._Whatsapp = value
        End Set
    End Property

    Public Property Facebook As String
        Get
            Return Me._Facebook
        End Get
        Set(value As String)
            If ValidarCadena(value, 100, False) Then
                Me._Facebook = value
            Else
                Throw New ArgumentException("La dirección de Facebook no puede exceder de 100 caracteres")
            End If
        End Set
    End Property

    Public Property Twiter As String
        Get
            Return Me._Twitter
        End Get
        Set(value As String)
            If ValidarCadena(value, 50, False) Then
                Me._Twitter = value
            Else
                Throw New ArgumentException("La direccion de Twiter no puede exceder los 50 caracteres")
            End If
        End Set
    End Property

    ''' <summary>
    ''' Función encargada de mostrar todos los datos de los jugadores.
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overrides Function ToString() As String
        Return Me._NIF & "#" & Me._Nombre & "#" & Me._Apellidos & "#" & CStr(Me._FechaNacimiento) _
                & "#" & Me._Direccion.Calle & "#" & CStr(Me.Direccion.Numero) & "#" & _
                Me._Direccion.Puerta & "#" & Me._Direccion.Localidad & "#" & _
                Me._Direccion.Provincia & "#" & Me._CorreoElectronico & "#" & _
                Me._Whatsapp & "#" & Me._Facebook & "#" & Me._Twitter
    End Function

    ''' <summary>
    ''' Destructor
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Dispose()
        Me._NIF = "000000000"
        Me._Nombre = ""
        Me._Apellidos = ""
        Me._FechaNacimiento = #1/1/1000#
        Me._Direccion = Nothing
        Me._CorreoElectronico = ""
        Me._Whatsapp = 0
        Me._Facebook = ""
        Me._Twitter = ""
    End Sub

    ''' <summary>
    ''' Destructor
    ''' </summary>
    ''' <remarks></remarks>
    Protected Overrides Sub finalize()
        Me._NIF = "000000000"
        Me._Nombre = ""
        Me._Apellidos = ""
        Me._FechaNacimiento = #1/1/1000#
        Me._Direccion = Nothing
        Me._CorreoElectronico = ""
        Me._Whatsapp = 0
        Me._Facebook = ""
        Me._Twitter = ""
    End Sub

End Class

